﻿// -----------------------------------------------------------------------
// <copyright file="IFileSystem.cs" company="Company">
// Company 2011
// </copyright>
// -----------------------------------------------------------------------

using System.Runtime.InteropServices;

namespace Company.IO.Interfaces
{
    /// <summary>
    /// Interface to encapsulate the direct access to the underlying Filesystem.
    /// </summary>
    [Guid("7025849e-5da4-4e93-a8bb-055c0c3b0435")]
    public interface IFileSystem
    {
        /// <summary>
        /// Get the underlying Directory object
        /// </summary>
        IDirectory Directory { get; }

        /// <summary>
        /// Get the underlying Path object
        /// </summary>
        IPath Path { get; }

        /// <summary>
        /// Get the underlying File object
        /// </summary>
        IFile File { get; }

        /// <summary>
        /// Copies the directory.
        /// </summary>
        /// <param name="sourcePath">The source path.</param>
        /// <param name="destinationPath">The destination path.</param>
        void CopyDirectory(string sourcePath, string destinationPath);

        /// <summary>
        /// Moves the files.
        /// </summary>
        /// <param name="sourcePath">The source path.</param>
        /// <param name="destinationPath">The destination path.</param>
        void MoveFiles(string sourcePath, string destinationPath);

        /// <summary>
        /// Directories the has files.
        /// </summary>
        /// <param name="directoryPath">The directory path.</param>
        /// <param name="recursive">if set to <c>true</c> [recursive].</param>
        /// <returns></returns>
        bool DirectoryHasFiles(string directoryPath, bool recursive);
    }
}